/**
 * 只使用[].push // [].pop() 即栈操作
 * 实现栈的逆序输出：
 * 要求不能使用其他数据结构
 * 思考：
 *      pop每次pop的是栈顶元素，而我们想得到栈底元素
 *      递归，如果是空的，返回当前的pop值
 *      否则，
 *          不断递归，当前函数，直至返回了最后一个值
 *          push以前的值
 *          返回last
 * 
 * 
 *      函数2设计：
 *          既然每次能拿到栈底元素，怎么实现，将该值输出呢
 *          逆序输出调用函数1获取每次最新的栈底元素，
 *           不断递归，直至遇见掏空栈的最后一个元素，
 *          然后向上回溯，找到可push的值
 * 
 * 
 */

let arr = [3,4,1,2];
 function getAndRemoveLast(stack){
    let result = stack.pop();
    if(!stack.length){
        return result;
    }else{
        let last = getAndRemoveLast(stack);
        stack.push(result);
        return last;
    }
 }


 function reverse(stack){
    if(!stack.length){
        return;
    }

    let i = getAndRemoveLast(stack);
    reverse(stack);// 不断递归
    stack.push(i);
 }

reverse(arr);
 console.log(arr);// 2 1 4 3